package com.ttao.myrule;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import com.netflix.loadbalancer.RoundRobinRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyselfRule {

    /**
     * IRule共有七种负载算法，分别是：
     * 1.RoundRobinRule               轮询
     * 2.RandomRule                   随机
     * 3.RetryRule                    先按照RoundRobinRule的策略获取服务，如果获取服务失败则在指定时间内进行重试，获取可用的服务
     * 4.WeightedResponseTimeRule     对RoundRobinRule的扩展，响应速度越快的实例选择权重越多，越容易被选择
     * 5.BestAvailableRule            会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务，然后选择一个并发量最小的服务
     * 6.AvailableFilteringRule       先过滤掉故障实例，再选择并发较小的实例
     * 7.ZoneAvoidanceRule            默认规则，复合判断server所在区域的性能和server的可用性选择服务器
     * @return
     */
    @Bean
    public IRule myRule() {
        //定义为随机
        return new RandomRule();
    }
}
